const CategoryModel = require('../models/categoryModel');
const { validateRequiredFields } = require('../utils/helpers');

class CategoryController {
  // 获取所有区域（公开接口）
  static async getAllAreas(req, res) {
    try {
      const areas = await CategoryModel.getAllAreas();
      
      res.json({
        code: 200,
        msg: '获取成功',
        data: areas
      });
    } catch (error) {
      console.error('获取区域列表失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 获取所有剧种（公开接口）
  static async getAllGenres(req, res) {
    try {
      const genres = await CategoryModel.getAllGenres();
      
      res.json({
        code: 200,
        msg: '获取成功',
        data: genres
      });
    } catch (error) {
      console.error('获取剧种列表失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 创建区域（管理端）
  static async createArea(req, res) {
    try {
      // 验证必需字段
      validateRequiredFields(req.body, ['name']);
      
      const { name } = req.body;
      
      // 检查是否已存在
      const existingAreas = await CategoryModel.getAllAreas();
      const exists = existingAreas.some(area => area.name === name);
      
      if (exists) {
        return res.status(400).json({
          code: 400,
          msg: '区域已存在'
        });
      }
      
      await CategoryModel.createArea(name);
      
      res.json({
        code: 200,
        msg: '区域创建成功'
      });
    } catch (error) {
      console.error('创建区域失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 创建剧种（管理端）
  static async createGenre(req, res) {
    try {
      // 验证必需字段
      validateRequiredFields(req.body, ['name']);
      
      const { name } = req.body;
      
      // 检查是否已存在
      const existingGenres = await CategoryModel.getAllGenres();
      const exists = existingGenres.some(genre => genre.name === name);
      
      if (exists) {
        return res.status(400).json({
          code: 400,
          msg: '剧种已存在'
        });
      }
      
      await CategoryModel.createGenre(name);
      
      res.json({
        code: 200,
        msg: '剧种创建成功'
      });
    } catch (error) {
      console.error('创建剧种失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 更新区域（管理端）
  static async updateArea(req, res) {
    try {
      const { id } = req.params;
      const { name } = req.body;
      
      if (!id) {
        return res.status(400).json({
          code: 400,
          msg: '缺少区域ID'
        });
      }
      
      if (!name) {
        return res.status(400).json({
          code: 400,
          msg: '缺少区域名称'
        });
      }
      
      await CategoryModel.updateArea(id, name);
      
      res.json({
        code: 200,
        msg: '区域更新成功'
      });
    } catch (error) {
      console.error('更新区域失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 更新剧种（管理端）
  static async updateGenre(req, res) {
    try {
      const { id } = req.params;
      const { name } = req.body;
      
      if (!id) {
        return res.status(400).json({
          code: 400,
          msg: '缺少剧种ID'
        });
      }
      
      if (!name) {
        return res.status(400).json({
          code: 400,
          msg: '缺少剧种名称'
        });
      }
      
      await CategoryModel.updateGenre(id, name);
      
      res.json({
        code: 200,
        msg: '剧种更新成功'
      });
    } catch (error) {
      console.error('更新剧种失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 删除区域（管理端）
  static async deleteArea(req, res) {
    try {
      const { id } = req.params;
      
      if (!id) {
        return res.status(400).json({
          code: 400,
          msg: '缺少区域ID'
        });
      }
      
      await CategoryModel.deleteArea(id);
      
      res.json({
        code: 200,
        msg: '区域删除成功'
      });
    } catch (error) {
      console.error('删除区域失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }

  // 删除剧种（管理端）
  static async deleteGenre(req, res) {
    try {
      const { id } = req.params;
      
      if (!id) {
        return res.status(400).json({
          code: 400,
          msg: '缺少剧种ID'
        });
      }
      
      await CategoryModel.deleteGenre(id);
      
      res.json({
        code: 200,
        msg: '剧种删除成功'
      });
    } catch (error) {
      console.error('删除剧种失败:', error);
      res.status(500).json({
        code: 500,
        msg: error.message || '服务器错误'
      });
    }
  }
}

module.exports = CategoryController;